package com.yeyuanqi.hottop.annotation;

/**
 * 查询限制注解
 * @author: yeyuanqi
 * @date: 2022/01/11
 */

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessLimit {
    /**
     * 限制周期(秒)
     */
    int seconds();

    /**
     * 规定周期内限制次数
     */
    int maxCount();

    /**
     * 触发限制时的消息提示
     */
    String msg() default "操作频率过高";

}

//@Retention作用是定义被它所注解的注解保留多久
//runtime：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在
//ElementType.METHOD/**用于描述方法 Method declaration */
//@Target说明了Annotation所修饰的对象范围：Annotation可被用于 packages、types（类、接口、枚举、Annotation类型）、类型成员（方法、构造方法、成员变量、枚举值）、方法参数和本地变量（如循环变量、catch参数）。